package com.example.demo.utils;

import org.springframework.util.StringUtils;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class TokenUtils {
    //加密的字符串,相当于签名
    private static final String SINGNATURE_TOKEN = "PIESAT_TOKEN";

    /**
     * 将userInfo进行加密
     * @param userInfo 传进来的字符串
     * @return 加密后的字符串
     */
    public static String encoder(String userInfo) {
        if (StringUtils.isEmpty(userInfo)) {
            return null;
        }
        //获取编码器
        Base64.Encoder encoder = Base64.getEncoder();
        String singnatureBase64 = encoder.encodeToString(SINGNATURE_TOKEN.getBytes(StandardCharsets.UTF_8));
        String s = encoder.encodeToString(userInfo.getBytes());
        return singnatureBase64 + s;
    }


    /**
     * 根据Token获取用户信息  解码字符串
     *
     * @param token
     * @return
     */
    public static String decoder(String token) {
        if (StringUtils.isEmpty(token)) {
            return null;
        }
        try {
            //获取编码器
            Base64.Encoder encoder = Base64.getEncoder();
            String singnatureBase64 = encoder.encodeToString(SINGNATURE_TOKEN.getBytes());
            token = token.replaceFirst(singnatureBase64, "");
            //获取解码器
            Base64.Decoder decoder = Base64.getDecoder();
            //对编码后的字符串进行解码
            byte[] decode = decoder.decode(token);
            String userinfo = new String(decode, StandardCharsets.UTF_8);
            return userinfo;
        }catch (Exception e){

            return "";
        }

    }
    /**
     * 根据Token获取用户名
     * @param token
     * @return
     */
    public static String getUsernameByToken(String token){
        token = decoder(token);//进行解密
        if(!token.contains("|")){//判断token有没有|这个符号
            return "";
        }
        String[] strs = token.split("\\|");//加两个斜杠才能识别是|，把token分割成两部分
        if(strs.length==0){
            return "";
        }
        return strs[0];
    }
    /**
     * 获取对应的token
     * @param userInfo
     * @return
     */
    public static String getToken(String userInfo){
        long time = System.currentTimeMillis()+24*60*60*1000;
        return encoder(userInfo+"|"+time);
    }
//
//    /**
//     * 检测token是否有效
//     * @param token
//     * @return
//     */
//    public static ReturnData checkToken(String token){
//        token = decoder(token);//进行解密
//        if(!token.contains("|")){//判断token有没有|这个符号
//            return ReturnData.error("token错误");
//        }
//        String[] strs = token.split("\\|");//加两个斜杠才能识别是|，把token分割成两部分
//        long time = Long.parseLong(strs[1]);//过期时间 Long.parseLong把字符串转化为数字
//        long now = System.currentTimeMillis();//当前时间
//        if(time<now){
//
//            return ReturnData.error("token过期，请重新登录");
//        }
//        return ReturnData.ok("成功");
//    }
    public static void main(String[] args) {

        System.out.println(encoder("lan|1710903111817"));


    }





}
